package throws_;

import java.io.FileInputStream;

/**
 * @author 徐州城
 * @version 1.0
 */
public class ThrowsDetail {
    public static void main(String[] args) {
        f2();
    }

    public static void f2() /*throws ArithmeticException*/{
        //1. 对于编译异常，程序中必须处理，比如 try - catch 或者 throws
        //2. 对于运行时异常，程序中如果没有处理，默认就是throws处理方式

        int n1 = 10;
        int n2 = 0;
        double res = n1 / n2;
    }

    public static void f1()throws Exception{
        //解读
        //1、因为f3() 方法抛出的是一个编译异常
        //2、即这时，就要去f1() 必须去处理这个编译异常
        //3、在f1()中，要么 try - catch ，或者继续 throws 这个编译异常
        f3();
    }

    public static void f3() throws Exception {
        FileInputStream fis = new FileInputStream("f://aa.txt");

    }

    public static void f4(){
        //解读：
        //1、在f4()中调用f5() 是ok的
        //2、原因是f5() 抛出的是运行时异常
        //3、在java中，并不要求程序员显示的处理，因为有默认处理机制
        f5();
    }

    public static void f5()throws NullPointerException{

    }
}

class Father{
    public void method()throws RuntimeException{
    }
}

class Son extends Father{
    //3. 子类重写父类方法时，对抛出的异常的规定：子类重写的方法，
    //   所抛出的异常要么和父类抛出的异常一致，要么为父类抛出的异常类型的子类型
    //4. 在throws的过程中，如果有方法 try-catch，就相当于处理异常，就可以不必throws
    @Override
    public void method() throws NullPointerException {
    }
}